package com.vinfai.patterns.template;

/**
 * 模板方法：
 * 将公用的算法放在父类中，变化部分算法放到相应的子类中实现。
 * 问题：算法变化越多，子类也会膨胀。
 * Spring JDBC模板方法,通过回调方法减少了子类产生.
 * @author vinfai
 *
 */
public abstract class CalculateRateTemplate {

	protected abstract double doCalYearRateByDepositTypeAndMonth(int month);
	
	public double doCalRate(int month,double money){
		//模板方法，写通用代码
		if(month<=0){
			throw new RuntimeException("args error.");
		}
		//do else
		//子类实现不同的算法
		double yearRate = this.doCalYearRateByDepositTypeAndMonth(month);
		return yearRate*money+money;
	}
}
